package work.mediway.common.util;

import cn.hutool.core.util.StrUtil;
import org.apache.ibatis.type.Alias;
import org.bouncycastle.util.Strings;
import org.bouncycastle.util.encoders.Hex;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author lipengfei_ylrj <lipengfei_ylrj@mediway.cn><br/>
 * @date 2022/8/24
 */
@Alias("CdrmpStringUtil")
public class StringUtil {

    /**
     * 判断字符串是否json格式
     *
     * @param str
     * @return
     */
    public static boolean getJSONType(String str) {
        boolean result = false;
        if (StrUtil.isNotBlank(str)) {
            str = str.trim();
            if (str.startsWith("{") && str.endsWith("}")) {
                result = true;
            } else if (str.startsWith("[") && str.endsWith("]")) {
                result = true;
            }
        }
        return result;

    }


    /**
     * 字节数组转十六进制字符串
     *
     * @param bytes 字节数组
     * @return 十六进制字符串
     */
    public static String binToHex(byte[] bytes) {
        return Hex.toHexString(bytes).toUpperCase();
    }

    /**
     * 十六进制字符串转字节数组
     *
     * @param hex 字节数组
     * @return 十六进制字符串
     */
    public static byte[] hexToBin(String hex) {
        return Hex.decode(hex);
    }

    /**
     * 字节数组转UTF8字符串
     *
     * @param bytes 字节数组
     * @return UTF8字符串
     */
    public static String binToStr(byte[] bytes) {
        return new String(bytes, StandardCharsets.UTF_8);
    }

    /**
     * UTF8字符串转字节数组
     *
     * @param str UTF8字符串
     * @return 字节数组
     */
    public static byte[] strToBin(String str) {
        return Strings.toUTF8ByteArray(str);
    }

    //将url参数转换成map
    public static Map getUrlParams(String param) {
        Map map = new HashMap(0);
        if (StrUtil.isBlank(param)) {
            return map;
        }
        String[] params = param.split("&");
        for (int i = 0; i < params.length; i++) {
            String[] p = params[i].split("=");
            if (p.length == 2) {
                map.put(p[0], p[1]);
            }
        }
        return map;
    }

    /**
     * 通过正则表达式获取内容
     *
     * @param regex		正则表达式
     * @param from		原字符串
     * @return	返回匹配结果
     */
    public static String[] regex(String regex, String from){
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(from);
        List<String> results = new ArrayList<String>();
        while(matcher.find()){
            for (int i = 0; i < matcher.groupCount(); i++) {
                results.add(matcher.group(i+1));
            }
        }
        return results.toArray(new String[]{});
    }
}
